package LeedCode_BinaryTree;

/**
 * Created with IntelliJ IDEA.
 * Description:根据二叉树创建字符串
 * User: 阿宾
 * Date: 2024-11-27
 * Time: 15:06
 */
/*
分析：
1、根节点：首先处理根节点，将值加入字符串汇总
2、左子树：递归处理左子树
    左子树不为空 加入左括号，递归处理左子树，然后加有括号
    左子树为空右子树不为空 加入空括号对
3、右子树：递归处理右子树
    右子树不为空，加入左括号，递归处理右子树，加右括号
    右子树为空 省略空括号对


 */
public class Demo11 {
    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int val) {
            this.val = val;
        }
    }
    public String tree2str(TreeNode root) {
        if(root == null){
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(root.val);
        //处理左子树
        if(root.left != null || root.right != null){
            stringBuilder.append("(");
            stringBuilder.append(tree2str(root.left));
            stringBuilder.append(")");
        }
        //处理右子树
        if(root.right != null){
            stringBuilder.append("(");
            stringBuilder.append(tree2str(root.right));
            stringBuilder.append(")");
        }
        //左右子树为空直接返回
        return stringBuilder.toString();
    }

    public static void main(String[] args) {

    }
}
